package com.umariana.ClinicaVeterinaria.InterfazGrafica;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.border.TitledBorder;
import javax.swing.border.EtchedBorder;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JComboBox;

import com.umariana.ClinicaVeterinaria.Persistencia.RazasDao;
import com.umariana.ClinicaVeterinaria.mundo.Propietario;
import java.awt.event.ItemListener;
import java.awt.event.ItemEvent;



public class DialogoCrearMascota extends JDialog implements ActionListener , ItemListener , KeyListener{

	/**
	 * serial
	 */
	private static final long serialVersionUID = 1L;

	/**
	 * panel de contenido del dialogo
	 */
	private final JPanel panelDeContenido = new JPanel();
	
	/**
	 * comando para agregar un propietario
	 */
	private static final String AGREGAR = "AGREGAR";
	/**
	 * comando para cancelar action
	 */
	private static final String CANCELAR = "CANCELAR";
	/**
	 * campo de texto para el nombre del propietario
	 */
	private JTextField txtNombres;
	/**
	 * campo de texto para los apellidos del propietario
	 */
	private JTextField txtApellidos;
	/**
	 * campo de tecto para la cedula del propietario
	 */
	private JTextField txtCedula;
	/**
	 * campo de texto para el nombre de mascota
	 */
	private JTextField txtNombreMascota;
	/**
	 * campo de texto para la edad de la mascota
	 */
	private JTextField txtEdad;
	/**
	 * combox de especie de mascota
	 */
	private JComboBox<String> cbEspecie;
	/**
	 * combox de raza de la mascota
	 */
	private JComboBox<String> cbRaza;
	/**
	 * relacion con la interfaz principal
	 */
	private InterfazClinica principal;

	

	/**
	 * Create the dialog.
	 * @throws SQLException 
	 * @throws ClassNotFoundException 
	 * @throws IllegalAccessException 
	 * @throws InstantiationException 
	 */
	public DialogoCrearMascota(InterfazClinica ventana, String pIdentifiacion) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException {
		
		super(ventana,true);
		principal = ventana;
		
		
		
		setTitle("Agregar Mascota");
		setBounds(100, 100, 444, 360);
		getContentPane().setLayout(new BorderLayout());
		panelDeContenido.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(panelDeContenido, BorderLayout.CENTER);
		panelDeContenido.setLayout(null);
		
		JPanel panelInformacionPropietario = new JPanel();
		panelInformacionPropietario.setBorder(new TitledBorder(new EtchedBorder(EtchedBorder.LOWERED, null, null), "Informacion del Propietario", TitledBorder.LEADING, TitledBorder.TOP, null, null));
		panelInformacionPropietario.setBounds(10, 11, 408, 112);
		panelDeContenido.add(panelInformacionPropietario);
		panelInformacionPropietario.setLayout(null);
		{
			JLabel lblNombres = new JLabel("Nombres:");
			lblNombres.setBounds(10, 23, 84, 14);
			panelInformacionPropietario.add(lblNombres);
		}
		{
			JLabel lblApellidos = new JLabel("Apellidos: ");
			lblApellidos.setBounds(10, 48, 84, 14);
			panelInformacionPropietario.add(lblApellidos);
		}
		{
			JLabel lblCedula = new JLabel("Cedula");
			lblCedula.setBounds(10, 73, 84, 14);
			panelInformacionPropietario.add(lblCedula);
		}
		{
			txtNombres = new JTextField();
			txtNombres.setEditable(false);
			txtNombres.setBounds(104, 20, 270, 20);
			panelInformacionPropietario.add(txtNombres);
			txtNombres.setColumns(10);
		}
		{
			txtApellidos = new JTextField();
			txtApellidos.setEditable(false);
			txtApellidos.setBounds(104, 45, 270, 20);
			panelInformacionPropietario.add(txtApellidos);
			txtApellidos.setColumns(10);
		}
		{
			txtCedula = new JTextField();
			txtCedula.setEditable(false);
			txtCedula.setBounds(104, 70, 137, 20);
			panelInformacionPropietario.add(txtCedula);
			txtCedula.setColumns(10);
		}
		{
			JLabel lblNombreMascota = new JLabel("Nombre: ");
			lblNombreMascota.setBounds(20, 134, 88, 14);
			panelDeContenido.add(lblNombreMascota);
		}
		{
			txtNombreMascota = new JTextField();
			txtNombreMascota.setBounds(118, 134, 261, 20);
			panelDeContenido.add(txtNombreMascota);
			txtNombreMascota.setColumns(10);
		}
		{
			JLabel lblEspecie = new JLabel("Especie: ");
			lblEspecie.setBounds(20, 172, 88, 14);
			panelDeContenido.add(lblEspecie);
		}
		
		cbEspecie = new JComboBox<String>();
		cbEspecie.addItemListener(this);
		cbEspecie.setBounds(118, 169, 143, 20);
		panelDeContenido.add(cbEspecie);
		
		JLabel lblRaza = new JLabel("Raza");
		lblRaza.setBounds(20, 215, 88, 14);
		panelDeContenido.add(lblRaza);
		
	    cbRaza = new JComboBox<String>();
		cbRaza.setBounds(118, 212, 213, 20);
		panelDeContenido.add(cbRaza);
		
		JLabel lblEdad = new JLabel("Edad:");
		lblEdad.setBounds(20, 254, 88, 14);
		panelDeContenido.add(lblEdad);
		
		txtEdad = new JTextField();
		txtEdad.addKeyListener(this);
		txtEdad.setBounds(118, 251, 62, 20);
		panelDeContenido.add(txtEdad);
		txtEdad.setColumns(10);
		{
			JPanel panelBotones = new JPanel();
			panelBotones.setLayout(new FlowLayout(FlowLayout.RIGHT));
			getContentPane().add(panelBotones, BorderLayout.SOUTH);
			{
				JButton btnAgregar = new JButton("Agregar");
				btnAgregar.addActionListener(this);
				btnAgregar.setActionCommand(AGREGAR);
				panelBotones.add(btnAgregar);
				getRootPane().setDefaultButton(btnAgregar);
			}
			{
				JButton btnCancelar = new JButton("Cancelar");
				btnCancelar.addActionListener(this);
				btnCancelar.setActionCommand(CANCELAR);
				panelBotones.add(btnCancelar);
			}
		}
		
		
		actualizarDatosPropietario(pIdentifiacion);
		actualizarEspecies();
		String pEsp = cbEspecie.getSelectedItem().toString();
		actualizarRazas(pEsp);
		
	}

	/**
	 * actualiza la informacion del propietario en el panel informacion propietario
	 * @param pIdentificacion identificacion del propietario
	 */
	public void actualizarDatosPropietario(String pIdentificacion)
	{
		Propietario miPropietario = principal.buscarClientePorIdentificacion(pIdentificacion);
		txtNombres.setText(miPropietario.getNombres());
		txtApellidos.setText(miPropietario.getApellidos());
		txtCedula.setText(miPropietario.getIdentificacion());
		
	}

	/**
	 * actualiza las especies de la veterinaria 
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public void actualizarEspecies() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
	{
		RazasDao miRazas = new RazasDao();
		ArrayList<String> listaEspecies =miRazas.darEspecies();
		for (int i = 0; i <listaEspecies.size(); i++) {
			String miEspecie = listaEspecies.get(i);
			cbEspecie.addItem(miEspecie);
		}
	}
	
	/**
	 * actualiza la razas segun la especie
	 * @param pEspecie
	 * @throws InstantiationException
	 * @throws IllegalAccessException
	 * @throws ClassNotFoundException
	 * @throws SQLException
	 */
	public void actualizarRazas(String pEspecie) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException
	{
		RazasDao miRazas = new RazasDao();
		ArrayList<String> listaRazas =miRazas.darRazas(pEspecie);
		for (int i = 0; i <listaRazas.size(); i++) {
			String miRaza = listaRazas.get(i);
			cbRaza.addItem(miRaza);
		}
	}
	
	

	
	@Override
	public void actionPerformed(ActionEvent e) {
		
		String comando = e.getActionCommand();
		if(comando.equalsIgnoreCase(AGREGAR))
		{
			boolean validacion = true;
		
			
			if(txtNombreMascota.getText().equalsIgnoreCase(""))
			{
				validacion = false;
				JOptionPane.showMessageDialog(null, "El nombre de la mascota no es valido " , "Error", JOptionPane.ERROR_MESSAGE);
			}
			if(txtEdad.getText().equalsIgnoreCase(""))
			{
				validacion = false;
				JOptionPane.showMessageDialog(null, "La edad de la mascota no es valido " , "Error", JOptionPane.ERROR_MESSAGE);
			}
			if(validacion ==true)
			{
				String gNombreMascota = txtNombreMascota.getText();
				int gEdad =Integer.parseInt(txtEdad.getText().trim());
				String gEspecie = cbEspecie.getSelectedItem().toString();
				String gRaza = cbRaza.getSelectedItem().toString();
				principal.agregarNuevaMascota(txtCedula.getText(),gNombreMascota,gEdad,gRaza,gEspecie) ;
				dispose();
				JOptionPane.showMessageDialog(null, "Mascota Agregada!! " ,"Mascota Agregada",JOptionPane.INFORMATION_MESSAGE);
				
			}
			
			
			
		}
		if(comando.equalsIgnoreCase(CANCELAR))
		{
			dispose();
		}
			
	}

	/* (non-Javadoc)
	 * @see java.awt.event.ItemListener#itemStateChanged(java.awt.event.ItemEvent)
	 */
	@Override
	public void itemStateChanged(ItemEvent e) 
	{
		cbRaza.removeAllItems();
		String item = cbEspecie.getSelectedItem().toString();
		try {
			actualizarRazas(item);
		} catch (InstantiationException e1) {
			JOptionPane.showMessageDialog(null, "Error al reiniciar el la lista de razas " + "\n"+e1.getMessage(),"Error" , JOptionPane.ERROR_MESSAGE);
		} catch (IllegalAccessException e1) {
			JOptionPane.showMessageDialog(null, "Error al reiniciar el la lista de razas " + "\n"+e1.getMessage(),"Error" , JOptionPane.ERROR_MESSAGE);
		} catch (ClassNotFoundException e1) {
			JOptionPane.showMessageDialog(null, "Error al reiniciar el la lista de razas " + "\n"+e1.getMessage(),"Error" , JOptionPane.ERROR_MESSAGE);
		} catch (SQLException e1) {
			JOptionPane.showMessageDialog(null, "Error al reiniciar el la lista de razas " + "\n"+e1.getMessage(),"Error" , JOptionPane.ERROR_MESSAGE);
		}
		
	}

	@Override
	public void keyPressed(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void keyReleased(KeyEvent arg0) {
		// TODO Auto-generated method stub
		
	}

	@Override
	public void keyTyped(KeyEvent arg0) {
		// TODO Auto-generated method stub
		if(arg0.getComponent().equals(txtEdad))
		{
			char car = arg0.getKeyChar();
			if(car <'0' || car>'9')
				{arg0.consume();
				
				}
		}
		
	}
	
	
	
	
	
}
